home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 013 / menus.arc / MENUS.DOC < prev    next >
Text File  |  1987-04-13  |  38KB  |  1,010 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.                                   M E N U S
  23.                                  Version 1.0
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.                          A Menu Programming Language
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.                    (C) Copyright 1987, All Rights Reserved
  40.  
  41.                                      By
  42.  
  43.                                 Paul A Parker
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.                                                                        Page 2
  51.  
  52. CONTENTS
  53.  
  54. 1.   INTRODUCTION  . . . . . . . . . . . . . . . . . . . . . . . . . . .    3
  55.  
  56. 2.   PROGRAM STRUCTURE . . . . . . . . . . . . . . . . . . . . . . . . .    4
  57.      2.1. Menu File Requirements . . . . . . . . . . . . . . . . . . . .    4
  58.      2.2. Invoking the Program . . . . . . . . . . . . . . . . . . . . .    4
  59.      2.3. Introduction to Menus Programming  . . . . . . . . . . . . . .    4
  60.      2.4. Formatted Menu Structure . . . . . . . . . . . . . . . . . . .    4
  61.      2.5. Un-formatted Menu Structure  . . . . . . . . . . . . . . . . .    6
  62.      2.6. Interactive Batch Structure  . . . . . . . . . . . . . . . . .    6
  63.  
  64. 3.   MENU FUNCTIONS  . . . . . . . . . . . . . . . . . . . . . . . . . .    7
  65.      3.1. Menu Control . . . . . . . . . . . . . . . . . . . . . . . . .    7
  66.           3.1.1.    Menudef{}  . . . . . . . . . . . . . . . . . . . . .    7
  67.           3.1.2.    Select{} . . . . . . . . . . . . . . . . . . . . . .    7
  68.           3.1.3.    Menu{} . . . . . . . . . . . . . . . . . . . . . . .    7
  69.      3.2. Program Control  . . . . . . . . . . . . . . . . . . . . . . .    7
  70.           3.2.1.    Quit{} . . . . . . . . . . . . . . . . . . . . . . .    7
  71.           3.2.2.    Nobreak{}  . . . . . . . . . . . . . . . . . . . . .    7
  72.           3.2.3.    Password{} . . . . . . . . . . . . . . . . . . . . .    8
  73.           3.2.4.    Ifdir{}  . . . . . . . . . . . . . . . . . . . . . .    8
  74.           3.2.5.    Ifndir{} . . . . . . . . . . . . . . . . . . . . . .    9
  75.           3.2.6.    Iffile{} . . . . . . . . . . . . . . . . . . . . . .    9
  76.           3.2.7.    Ifnfile{}  . . . . . . . . . . . . . . . . . . . . .    9
  77.           3.2.8.    Ifset{}  . . . . . . . . . . . . . . . . . . . . . .    9
  78.           3.2.9.    Ifnset{} . . . . . . . . . . . . . . . . . . . . . .   10
  79.      3.3. Console I/O  . . . . . . . . . . . . . . . . . . . . . . . . .   11
  80.           3.3.1.    Prompt{} . . . . . . . . . . . . . . . . . . . . . .   11
  81.           3.3.2.    Input{}  . . . . . . . . . . . . . . . . . . . . . .   11
  82.           3.3.3.    Wait{} . . . . . . . . . . . . . . . . . . . . . . .   11
  83.           3.3.4.    Getkey{} . . . . . . . . . . . . . . . . . . . . . .   12
  84.           3.3.5.    Option{} . . . . . . . . . . . . . . . . . . . . . .   12
  85.           3.3.6.    Screen{} . . . . . . . . . . . . . . . . . . . . . .   12
  86.           3.3.7.    Timedisp{} . . . . . . . . . . . . . . . . . . . . .   12
  87.           3.3.8.    Title{}  . . . . . . . . . . . . . . . . . . . . . .   12
  88.           3.3.9.    Color{}  . . . . . . . . . . . . . . . . . . . . . .   13
  89.      3.4. Dos Calls  . . . . . . . . . . . . . . . . . . . . . . . . . .   13
  90.           3.4.1.    Command{}  . . . . . . . . . . . . . . . . . . . . .   13
  91.  
  92. 4.   EXAMPLES  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   15
  93.      4.1. Printer Setup Program  . . . . . . . . . . . . . . . . . . . .   15
  94.      4.2. Typewriter Program . . . . . . . . . . . . . . . . . . . . . .   16
  95.      4.3. DOS Interface Menu . . . . . . . . . . . . . . . . . . . . . .   17
  96.  
  97. 5.   PROGRAM SPECIFICATIONS  . . . . . . . . . . . . . . . . . . . . . .   21
  98.      5.1. Hardware Requirements  . . . . . . . . . . . . . . . . . . . .   21
  99.      5.2. Memory Requirements  . . . . . . . . . . . . . . . . . . . . .   21
  100.           5.2.1.    DOS Calls with Command{} . . . . . . . . . . . . . .   21
  101.           5.2.2.    Menu Definitions and Getkey Options  . . . . . . . .   21
  102.           5.2.3.    Program Statements . . . . . . . . . . . . . . . . .   21
  103.           5.2.4.    Internal Requirements  . . . . . . . . . . . . . . .   21
  104.      5.3. Program Limitations  . . . . . . . . . . . . . . . . . . . . .   22
  105.  
  106.  
  107.  
  108.  
  109.  
  110.                                                                        Page 3
  111.  
  112. 1.   INTRODUCTION
  113.  
  114.  
  115.      First I will give a little history of Menus.  I have been programming in C
  116.      for about two years, and have taught myself  everything I  know about C.
  117.      This  program  started  as  an  experiment  with  function  pointers and
  118.      developed into a simple programming language.
  119.  
  120.      The Menu Program reads an ASCII text command file and  tokenizes it into
  121.      function pointers with parameters in a doubly linked list of elements.  The
  122.      program then calls each function starting with the first element read, and
  123.      continues until the quit function is issued.  There are some provisions for
  124.      program flow control and conditional testing, but they are severly limited
  125.      in their scope.
  126.  
  127.      The language  currently has  twenty two functions and may be enhanced in
  128.      the future.  I'll admit there are limits to the language, but they allow
  129.      enough room  for the  language to  be usable.   Each  limitation will be
  130.      explained with the appropriate function.
  131.  
  132.      There is one thing that should  be  noted.    This  program  expects the
  133.      ansi.sys device driver to be installed if the menus are used or when any
  134.      screen formatting is done.  The program uses the driver to set colors, and
  135.      control how  messages are  printed to  the screen.  This requirement may
  136.      change in the future.
  137.  
  138.  
  139.  
  140.  
  141.  
  142.                                                                        Page 4
  143.  
  144. 2.   PROGRAM STRUCTURE
  145.  
  146.      2.1. Menu File Requirements
  147.  
  148.      The menu file must be Ascii  format with  line lengths  shorter than 256
  149.      characters.   There may  be only  one command per line in upper or lower
  150.      case, with the command  parameters  immediately  following  the command,
  151.      surrounded by  curly braces.   Comments  may be  placed anywhere outside
  152.      the curly braces and are ignored by the program.
  153.  
  154.           Example:  command{DIR}  display the current directory
  155.  
  156.  
  157.      2.2. Invoking the Program
  158.  
  159.      There are several ways the program may be  invoked.   It may  be invoked
  160.      with or  without command  line parameters.   The parameters are the file
  161.      name and silence switch, and may be placed in any order.  If there are no
  162.      command line  parameters, the program searches for the default menu file
  163.      "MENU.MNU" in the root directory.   If the  silence switch  is used, the
  164.      copyright notice  and other  messages are  silenced when  the program is
  165.      being loaded.
  166.  
  167.           Examples: C>menu /s
  168.  
  169.  
  170.      2.3. Introduction to Menus Programming
  171.  
  172.      Menus is a "functional" language, meaning that each statement is actually
  173.      a call to a function.  The language can take three basic forms that each
  174.      act entirely different.  The first form is the formatted  menu structure
  175.      with menu definitions and selections.  The second form is the unformatted
  176.      menu structure with menu definitions but no selections.  The third form is
  177.      the interactive batch structure with no menu definitions or selections.
  178.  
  179.  
  180.      2.4. Formatted Menu Structure
  181.  
  182.      The formatted  menu structure  displays the menus in a predefined format
  183.      on the screen.  There are five different windows on the menu screen that
  184.      can be controlled.  Each window is flexible to some extent, but there are
  185.      size limitations.
  186.  
  187.      At the top of the screen is the  major title  window, where  three major
  188.      title lines may be displayed.  The titles are enclosed in a single line box,
  189.      so two extra lines are taken from the screen when major titles are used.
  190.      The major  titles will remain on the menu screen for the duration of the
  191.      menu program.  Immediately following the major menu is a double line box
  192.      enclosing the remainder of the screen.  If no major titles are used the box
  193.      encloses the entire screen.
  194.  
  195.      The menu title window  is surrounded  by a  single line  box and appears
  196.      directly below the major title window on the inside of the double line box
  197.      surrounding the screen.  There can be a maximum of two menu  title lines
  198.  
  199.  
  200.  
  201.  
  202.                                                                        Page 5
  203.  
  204.      in the window, and if there are no menu titles, the menu title window is
  205.      not displayed.
  206.  
  207.      The area below the menu title and above  the prompt  and input  lines is
  208.      used for menu selections.  The current selection prompt is on the bottom
  209.      line of this window.  Currently  there  is  no  provision  for selection
  210.      scrolling, so the number of selections is limited by the screen size.  The
  211.      other  two  windows  are  the  prompt  and  input  windows  that  appear
  212.      respectivly as the last two lines below the selection prompt line.
  213.  
  214.      Example:  screen{off}
  215.                title{Menus Major Title}
  216.                menudef{0}
  217.                title{Menu One}
  218.                     select{Quit Menus}
  219.                          quit{}
  220.                     select{Menu Two}
  221.                          menu{1}
  222.                     select{Menu Three}
  223.                          menu{3}
  224.                menudef{1}
  225.                title{Menu Two}
  226.                     select{Menu One}
  227.                          menu{0}
  228.                     select{Sub-Menu One}
  229.                          menu{2}
  230.                menudef{2}
  231.                title{Sub-Menu One}
  232.                     select{Menu Two}
  233.                          menu{1}
  234.                menudef{3}
  235.                title{Menu Three}
  236.                     select{Menu One}
  237.                     menu{0}
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.                                                                        Page 6
  246.  
  247.      2.5. Un-formatted Menu Structure
  248.  
  249.      The  unformatted  menu  structure  has limited display formatting and no
  250.      menu selections, menu definitions are used more for program flow control.
  251.      They act as labels for procedures.  Caution, the last function in the menu
  252.      file must be a quit, or a call to a menu definition, otherwise a runtime
  253.      error will occur.
  254.  
  255.      Example:  menudef{0}
  256.                getkey{Press <ESC> to quit, <RETURN> to run dos command.}
  257.                     option{27}
  258.                          quit{}
  259.                     option{13}
  260.                          prompt{}
  261.                          input{0,Enter command: }
  262.                          command{%0}
  263.                          menu{0}
  264.  
  265.  
  266.      2.6. Interactive Batch Structure
  267.  
  268.      The interactive batch structure has no menu definitions or selections.  The
  269.      program starts at the first function read and  terminates with  the quit
  270.      function.  Failure to include the quit may result in a runtime error.
  271.  
  272.      Example:  input{0,1w,Enter first name: }
  273.                input{1,1c,Enter middle initial: }
  274.                input{2,1w,Enter last name: }
  275.                prompt{}
  276.                command{echo %0 %1. %2}
  277.                quit{}
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.                                                                        Page 7
  285.  
  286. 3.   MENU FUNCTIONS
  287.  
  288.      3.1. Menu Control
  289.  
  290.           3.1.1.    Menudef{}
  291.  
  292.                     Syntax:   menudef{number}
  293.  
  294.                               This function  begins the  definition of a menu
  295.                               identified by number.  Currently only  menus 0-
  296.                               19 can  be defined.   For examples refer to the
  297.                               Program Structure and Examples sections of this
  298.                               manual.
  299.  
  300.  
  301.           3.1.2.    Select{}
  302.  
  303.                     Syntax:   select{title}
  304.  
  305.                               This function  defines the  beginning of a menu
  306.                               selection   and   must   follow   a  menudef{}.
  307.                               Currently the number of selections is limited by
  308.                               the size of the  screen.    Future enhancements
  309.                               will allow menu selections to scroll up and down
  310.                               in the available space.  For  examples refer to
  311.                               the Program  Structure and Examples sections of
  312.                               this manual.
  313.  
  314.  
  315.           3.1.3.    Menu{}
  316.  
  317.                     Syntax:   menu{number/path}
  318.  
  319.                               This function passes control to the menu that is
  320.                               identified by number, or loads the menu defined
  321.                               by path.  An error occurs if the menu number is
  322.                               not  defined,  or  the  program cannot find the
  323.                               menu file.
  324.  
  325.  
  326.      3.2. Program Control
  327.  
  328.           3.2.1.    Quit{}
  329.  
  330.                     Syntax:   quit{message}
  331.  
  332.                               This function  terminates the  operation of the
  333.                               menu system,  prints the message and returns to
  334.                               the calling program.
  335.  
  336.                     Example:  quit{Goodbye.}
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.                                                                        Page 8
  344.  
  345.           3.2.2.    Nobreak{}
  346.  
  347.                     Syntax:   nobreak{password}
  348.  
  349.                               This function set the Control-Break level.   If
  350.                               this command  is not  issued, then  the user is
  351.                               prompted  if  they  want  to  break.    If this
  352.                               command is  issued and  password is blank, then
  353.                               no break is allowed.  If a break is requested and
  354.                               a  password  is  present  the  password must be
  355.                               given first before the  program will  break.  A
  356.                               word of caution; if a break is issued at the dos
  357.                               level and a password  is required,  the program
  358.                               will stop until the password is entered.
  359.  
  360.                     Example:  nobreak{ }
  361.  
  362.  
  363.           3.2.3.    Password{}
  364.  
  365.                     Syntax:   password{password}
  366.  
  367.                               This  function  requires  the  password  to  be
  368.                               entered before the program will continue.  If the
  369.                               menu screen  is present, then the user is given
  370.                               three tries before  they  are  returned  to the
  371.                               current menu  or calling program.  Caution if a
  372.                               password is issued with the dos screen on, then
  373.                               the  password   must  be   entered  before  the
  374.                               program continues.
  375.  
  376.                     Example:  password{#}
  377.  
  378.  
  379.           3.2.4.    Ifdir{}
  380.  
  381.                     Syntax:   ifdir{path,message}
  382.  
  383.                               If the path exists, then the message is printed
  384.                               and control  is returned to the current menu or
  385.                               calling program.
  386.  
  387.                     Example:  ifdir{c:\dos,ERROR: DOS exists!}
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.                                                                        Page 9
  395.  
  396.           3.2.5.    Ifndir{}
  397.  
  398.                     Syntax:   ifndir{path,message}
  399.  
  400.                               If the path does not exists, then the message is
  401.                               printed and  control is returned to the current
  402.                               menu or calling program.
  403.  
  404.                     Example:  ifndir{c:\dos,ERROR: DOS does not exist!}
  405.  
  406.  
  407.           3.2.6.    Iffile{}
  408.  
  409.                     Syntax:   iffile{pathname,message}
  410.  
  411.                               If the file exists, then the message is printed
  412.                               and control  is returned to the current menu or
  413.                               calling program.
  414.  
  415.                     Example:  iffile{command.com,COMMAND.COM exists!}
  416.  
  417.  
  418.           3.2.7.    Ifnfile{}
  419.  
  420.                     Syntax:   ifnfile{pathname,message}
  421.  
  422.                               If the file does not exists, then the message is
  423.                               printed and  control is returned to the current
  424.                               menu or calling program.
  425.  
  426.                     Example:  ifnfile{wp.exe,WP.EXE not found!}
  427.  
  428.  
  429.           3.2.8.    Ifset{}
  430.  
  431.                     Syntax:   ifset{name=value,message}
  432.  
  433.                               If the environment variable name exists  and is
  434.                               equal to the value, then the message is printed
  435.                               and control is returned to the  current menu or
  436.                               calling program.   The name is required but the
  437.                               value is not.  If the variable exists and a value
  438.                               was not  specified then the program assumes the
  439.                               value is equal regardless and the program returns
  440.                               to the current menu or calling program.
  441.  
  442.                     Example:  ifset{comspec=c:\command.com,Boot from Floppy!}
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.                                                                       Page 10
  450.  
  451.           3.2.9.    Ifnset{}
  452.  
  453.                     Syntax:   ifnset{name=value,message}
  454.  
  455.                               If the  environment variable name exists and is
  456.                               not equal to the  value,  then  the  message is
  457.                               printed and  control is returned to the current
  458.                               menu or calling program.  The  name is required
  459.                               but the value is not.  If the variable does not
  460.                               exist and  a value  was not  specified then the
  461.                               program returns  to the current menu or calling
  462.                               program.
  463.  
  464.                     Example:  ifnset{userid,ERROR: User Id unknown!}
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.                                                                       Page 11
  472.  
  473.      3.3. Console I/O
  474.  
  475.           3.3.1.    Prompt{}
  476.  
  477.                     Syntax:   prompt{message}
  478.  
  479.                               This function prints a  message  on  the prompt
  480.                               line when  the menu  is showing,  or if the dos
  481.                               screen is showing, it prints the message on next
  482.                               available line.   Ansi.sys  may be  used by the
  483.                               prompt function to format the screen.
  484.  
  485.                     Example:  prompt{^[[2J}  clear screen. ^[ is Ascii Esc.
  486.  
  487.  
  488.           3.3.2.    Input{}
  489.  
  490.                     Syntax:   input{number,format,message}
  491.  
  492.                               This function prints the message and  waits for
  493.                               the user  to enter  information into a variable
  494.                               defined by number.  Currently only variables 0-
  495.                               9 are available and have a maximum length of 80
  496.                               characters.  The format is optional and defines
  497.                               what  information  is  accepted.  Format begins
  498.                               with a decimal value and ends with a "C" or "W".
  499.                               If a "C" is specified, then the number specified
  500.                               in  the  format  is   the  maximum   number  of
  501.                               characters read.  If a "W" is specified, then the
  502.                               number specified in the  format is  the maximum
  503.                               number of  words read.   The  variables will be
  504.                               expanded  when   included   in   command{},  as
  505.                               explained later.
  506.  
  507.                     Examples: input{0,12c,Enter file name with extension: }
  508.  
  509.  
  510.           3.3.3.    Wait{}
  511.  
  512.                     Syntax:   wait{key,message}
  513.  
  514.                               This function  prints the message and waits for
  515.                               key to be pressed.  If key is equal to zero then
  516.                               the  program  waits  for  any key.  Key must be
  517.                               expressed in Ascii as a decimal value.
  518.  
  519.                     Example:  wait{0,Press any key to continue.}
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.                                                                       Page 12
  527.  
  528.           3.3.4.    Getkey{}
  529.  
  530.                     Syntax:   getkey{message}
  531.  
  532.                               This function prints the message and waits for a
  533.                               key to be hit.  If any of the options that follow
  534.                               have a key that matches, the  control is passed
  535.                               to the command following the appropriate option.
  536.  
  537.  
  538.           3.3.5.    Option{}
  539.  
  540.                     Syntax:   option{key,key...}
  541.  
  542.                               This function defines a key or keys used by the
  543.                               getkey function.  If the key returned by getkey
  544.                               matches any of the keys listed, then control is
  545.                               passed to the function following the option.  Key
  546.                               must be expressed in  Ascii  as  decimal values
  547.                               delimited by commas.
  548.  
  549.                     Example:  getkey{Answer Y/N}
  550.                                    option{89,121}
  551.                                         prompt{Yes}
  552.                                    option{78,110}
  553.                                         prompt{No}
  554.  
  555.  
  556.           3.3.6.    Screen{}
  557.  
  558.                     Syntax:   screen{value}
  559.  
  560.                               This function  turns on and off the dos screen.
  561.                               If the value is equal  to  OFF,  then  the menu
  562.                               screen is displayed.  If the value is equal to ON,
  563.                               then the dos screen is displayed.
  564.  
  565.                     Example:  screen{off}  turn off dos screen display.
  566.  
  567.  
  568.           3.3.7.    Timedisp{}
  569.  
  570.                     Syntax:   timedisp{value}
  571.  
  572.                               This function turns on and off the time display.
  573.                               If the value is equal to OFF, then the time and
  574.                               date is not displayed.  If the value is equal to
  575.                               ON, then the time and date is displayed.
  576.  
  577.                     Example:  screen{off}  turn off dos screen display.
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.                                                                       Page 13
  585.  
  586.           3.3.8.    Title{}
  587.  
  588.                     Syntax:   title{title line}
  589.  
  590.                               This function adds a title line to the major title,
  591.                               or the menu title, depending on the placement of
  592.                               the function.  If the title is before the first
  593.                               menudef{}, then it is added to the major title,
  594.                               but a maximum of three are allowed.  If the title
  595.                               is after a menudef{}, the title line is added to
  596.                               the  menu  title,  but  a  maximum  of  two are
  597.                               allowed.    For  additional  examples,  see the
  598.                               Examples section of this manual.
  599.  
  600.                     Example:  title{Menus Major Menu}
  601.  
  602.  
  603.           3.3.9.    Color{}
  604.  
  605.                     Syntax:   color{foreground,background,border}
  606.  
  607.                               This function  changes the  color of any of the
  608.                               menu  screen   sections   depending   on  their
  609.                               placement.    The  color function may be placed
  610.                               before the first major title where it set the dos
  611.                               color and  other prompts.  Color function after
  612.                               the major  titles sets  the color  of the major
  613.                               titles.   Color before  the menu title sets the
  614.                               color for the menu titles, and  color after the
  615.                               menu titles sets the color for the selections.
  616.  
  617.                     Colors:   Number    CGA            MGA
  618.                               0         Black          Black
  619.                               1         Blue           Underline White
  620.                               2         Green          White
  621.                               3         Cyan           White
  622.                               4         Red            White
  623.                               5         Magenta        White
  624.                               6         Brown          White
  625.                               7         White          White
  626.                               8         Gray           Black
  627.                               9         Light blue     Underline light white
  628.                               10        Light green    Light white
  629.                               11        Light cyan     Light white
  630.                               12        Light red      Light white
  631.                               13        Light magenta  Light white
  632.                               14        Yellow         Light white
  633.                               15        Light white    Light white
  634.  
  635.                     Example:  color{7,0,15}
  636.  
  637.  
  638.  
  639.  
  640.  
  641.                                                                       Page 14
  642.  
  643.      3.4. Dos Calls
  644.  
  645.           3.4.1.    Command{}
  646.  
  647.                     Syntax:   command{command line}
  648.  
  649.                               This function calls the dos command interpreter
  650.                               with the command line given.   The command line
  651.                               may contain  variables entered by the user.  To
  652.                               use  a  variable  previously  entered,  place a
  653.                               percent sign  before the  number in the command
  654.                               line.  If the percent sign is used by itself it is
  655.                               ignored,  but  if  there is a number immidiatly
  656.                               following the percent it will be expanded.  If the
  657.                               number is  preceded by  two percent signs, then
  658.                               one is removed and the number is not expanded.
  659.  
  660.                     Example:  input{0,1w,Enter file to type: }
  661.                               command{type %0 | more}
  662.                               quit{}
  663.  
  664.  
  665.  
  666.  
  667.  
  668.                                                                       Page 15
  669.  
  670. 4.   EXAMPLES
  671.  
  672.      4.1. Printer Setup Program  (batch structure)
  673.  
  674. Example #1     File name: setup
  675.  
  676. prompt{^[[2J}
  677. prompt{Printer Setup Program}
  678. prompt{}
  679. prompt{NEC Pinwriter P5/P6/P7}
  680. prompt{}
  681. prompt{<RETURN> to exit}
  682. prompt{}
  683. prompt{1 - 10 pitch}
  684. prompt{2 - 12 pitch}
  685. prompt{3 - 15 pitch}
  686. prompt{4 - 17 pitch}
  687. prompt{5 - 20 pitch}
  688. prompt{}
  689. getkey{Enter selection: }
  690. option{49}  '1'
  691.      command{echo ^\@^[P> prn}
  692.      quit{}
  693. option{50}  '2'
  694.      command{echo ^\@^[M> prn}
  695.      quit{}
  696. option{51}  '3'
  697.      command{echo ^\@^[g> prn}
  698.      quit{}
  699. option{52}  '4'
  700.      command{echo ^\@^[P^O> prn}
  701.      quit{}
  702. option{53}  '5'
  703.      command{echo ^\@^[M^O> prn}
  704.      quit{}
  705. option{13}  return
  706.      quit{}
  707.  
  708.  
  709.  
  710.  
  711.  
  712.                                                                       Page 16
  713.  
  714.      4.2. Typewriter Program  (unformatted menu structure)
  715.  
  716. Example #2     File name: typewrit
  717.  
  718. menudef{0}
  719. prompt{^[[2J}
  720. prompt{Typewriter Program}
  721. prompt{}
  722. getkey{<ESC> to quit, <RETURN> for next line.}
  723. option{27}
  724.      quit{}
  725. option{13}
  726.      prompt{Enter Line:}
  727.      input{0}
  728.      command{echo %0>prn}
  729.      menu{0}
  730.  
  731.  
  732.  
  733.  
  734.  
  735.                                                                       Page 17
  736.  
  737.      4.3. DOS Interface Menu  (formatted menu structure)
  738.  
  739. Example #3     File name: doscmds
  740.  
  741. screen{off}
  742. color{7,0,15}
  743. title{ DOS COMMAND INTERFACE }
  744. color{15,1,7}
  745.  
  746.     menudef{0}     Main Menu
  747.     color{14,2,13}
  748.     title{ Main Menu }
  749.     color{7,0,15}
  750.          select{File Commands}
  751.               menu{1}
  752.          select{Directory Commands}
  753.               menu{2}
  754.          select{Disk Commands}
  755.               menu{3}
  756.          select{System Commands}
  757.               menu{4}
  758.          select{Quit Program}
  759.               screen{on}
  760.               quit{Bye.}
  761.  
  762.     menudef{1}     File Commands
  763.     title{ File Commands }
  764.          select{Return to Main Menu}
  765.               menu{0}
  766.          select{<TYPE> Display File}
  767.               input{0,1w,Enter pathname: }
  768.               screen{on}
  769.               prompt{^[[2J}
  770.               command{type %0 | more}
  771.               wait{0,Press any key to continue.}
  772.               screen{off}
  773.          select{<COPY> Copy File}
  774.               input{0,1w,Enter source pathname: }
  775.               input{1,1w,Enter destination pathname: }
  776.               prompt{Coping..}
  777.               command{copy %0 %1}
  778.               prompt{}
  779.          select{<COMP> Compare File}
  780.               input{0,1w,Enter source pathname: }
  781.               input{1,1w,Enter destination pathname: }
  782.               screen{on}
  783.               prompt{^[[2J}
  784.               command{comp %0 %1}
  785.               wait{0,Press any key to continue.}
  786.               screen{off}
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.                                                                       Page 18
  794.  
  795.     menudef{2}     Directory Commands
  796.     title{ Directory Commands }
  797.          select{Return to Main Menu}
  798.               menu{0}
  799.          select{<DIR>   Display Directory}
  800.               input{0,Enter directory name: }
  801.               screen{on}
  802.               prompt{^[[2J}
  803.               command{dir %0 | more}
  804.               wait{0,Press any key to continue.}
  805.               screen{off}
  806.          select{<TREE>  List Directories}
  807.               input{0,1c,Enter drive designation: }
  808.               screen{on}
  809.               prompt{^[[2J}
  810.               command{tree %0 | more}
  811.               wait{0,Press any key to continue.}
  812.               screen{off}
  813.          select{<CHDIR> Change Directory}
  814.               input{0,Enter directory name: }
  815.               command{cd %0}
  816.          select{<MKDIR> Make Directory}
  817.               input{0,Enter directory name: }
  818.               getkey{Press <ESC> to abort, <RETURN> to continue.}
  819.                    option{27}
  820.                         prompt{}
  821.                    option{13}
  822.                         screen{on}
  823.                         prompt{^[[2J}
  824.                         command{echo Making %0...}
  825.                         command{md %0}
  826.                         wait{0,Press any key to continue.}
  827.                         screen{off}
  828.          select{<RMDIR> Remove Directory}
  829.               input{0,Enter directory name: }
  830.               getkey{Press <ESC> to abort, <RETURN> to continue.}
  831.                    option{27}
  832.                         prompt{}
  833.                    option{13}
  834.                         screen{on}
  835.                         prompt{^[[2J}
  836.                         command{echo Removing %0...}
  837.                         command{rd %0}
  838.                         wait{0,Press any key to continue.}
  839.                         screen{off}
  840.  
  841.  
  842.  
  843.  
  844.  
  845.                                                                       Page 19
  846.  
  847.     menudef{3}     Disk Commands
  848.     title{ Disk Commands }
  849.          select{Return to Main Menu}
  850.               menu{0}
  851.          select{<CHKDSK>   Check Disk}
  852.               input{0,1c,Enter chkdsk parameter: }
  853.               screen{on}
  854.               prompt{^[[2J}
  855.               command{chkdsk %0}
  856.               wait{0,Press any key to continue.}
  857.               screen{off}
  858.          select{<FORMAT>   Format Disk}
  859.               getkey{Press <ESC> to abort, A for drive A:, or B for drive B:}
  860.                    option{27}     esc
  861.                         prompt{}
  862.                    option{65,97}  A
  863.                         screen{on}
  864.                         prompt{^[[2J}
  865.                         command{format a:}
  866.                         screen{off}
  867.                    option{66,98}  B
  868.                         screen{on}
  869.                         prompt{^[[2J}
  870.                         command{format b:}
  871.                         screen{off}
  872.          select{<DISKCOPY> Copy Disk}
  873.               input{0,1c,Enter source drive letter: }
  874.               input{1,1c,Enter destination drive letter: }
  875.               screen{on}
  876.               prompt{^[[2J}
  877.               command{diskcopy %0: %1:}
  878.               screen{off}
  879.          select{<SYS>      Put Dos on Disk}
  880.               getkey{Press <ESC> to abort, A for drive A:, or B for drive B:}
  881.                    option{27}     esc
  882.                         prompt{}
  883.                    option{65,97}  A
  884.                         wait{13,Place disk in drive A: and press <RETURN>}
  885.                         screen{on}
  886.                         prompt{^[[2J}
  887.                         command{sys a:}
  888.                         screen{off}
  889.                    option{66,98}  B
  890.                         wait{13,Place disk in drive B: and press <RETURN>}
  891.                         screen{on}
  892.                         prompt{^[[2J}
  893.                         command{sys b:}
  894.                         screen{off}
  895.  
  896.  
  897.  
  898.  
  899.  
  900.                                                                       Page 20
  901.  
  902.          select{Copy Command.com to Disk}
  903.               getkey{Press <ESC> to abort, A for drive A:, or B for drive B:}
  904.                    option{27}     esc
  905.                         prompt{}
  906.                    option{65,97}  A
  907.                         wait{13,Place disk in drive A: and press <RETURN>}
  908.                         prompt{Coping Command.com...}
  909.                         command{copy \command.com a:}
  910.                         prompt{}
  911.                    option{66,98}  B
  912.                         wait{13,Place disk in drive B: and press <RETURN>}
  913.                         prompt{Coping Command.com...}
  914.                         command{copy \command.com b:}
  915.                         prompt{}
  916.  
  917.     menudef{4}     System Commands
  918.     title{ System Commands }
  919.          select{Return to Main Menu}
  920.               menu{0}
  921.          select{<DATE> Set system date}
  922.               screen{on}
  923.               prompt{^[[2J}
  924.               command{date}
  925.               screen{off}
  926.          select{<TIME> Set system time}
  927.               screen{on}
  928.               prompt{^[[2J}
  929.               command{time}
  930.               screen{off}
  931.          select{<SET>  Set environment}
  932.               input{0,Enter set parameters: }
  933.               screen{on}
  934.               prompt{^[[2J}
  935.               command{set %0}
  936.               wait{0,Press any key to continue.}
  937.               screen{off}
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.                                                                       Page 21
  945.  
  946. 5.   PROGRAM SPECIFICATIONS
  947.  
  948.      5.1. Hardware Requirements
  949.  
  950.           IBM PC, XT, AT, or compatable.  256K memory and one disk drive.
  951.  
  952.  
  953.      5.2. Memory Requirements
  954.  
  955.  
  956.           5.2.1.    DOS Calls with Command{}
  957.  
  958.                     When a  command{}  statement  is  issued,  command.com is
  959.                     reloaded and  given a command line.  There must be enough
  960.                     free memory  above the  menu program  to load command.com
  961.                     and any  program called  by command.com.  There is enough
  962.                     stack and heap  space  to  allow  twenty  menus  with the
  963.                     maximum selections  each.   The entire program takes only
  964.                     90K of memory.
  965.  
  966.  
  967.           5.2.2.    Menu Definitions and Getkey Options
  968.  
  969.                     The program is currently limited to  a maximum  of twenty
  970.                     menudef{}  statements  per  menu  file,  and a maximum of
  971.                     twenty option{} statements for each getkey{}.  The reason
  972.                     is because  the control  pointers used in the program are
  973.                     stored in a fixed length array.  If you need to define more
  974.                     menus,  then  use  another  menu  file and call it with a
  975.                     menu{} statement.
  976.  
  977.  
  978.           5.2.3.    Program Statements
  979.  
  980.                     Each  recognized  program  statment  is  converted  to  a
  981.                     function pointer and added to a linked list.  Each node in
  982.                     the linked list occupies 10 bytes, and there  is a buffer
  983.                     allocated for the parameters passed to each function call.
  984.  
  985.  
  986.           5.2.4.    Internal Requirements
  987.  
  988.                     Two video buffers are used and each require 4000 bytes.
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.                                                                       Page 22
  996.  
  997.      5.3. Program Limitations
  998.  
  999.           Only one statement may be placed on a line.
  1000.           Line lengths are limited to 256 bytes.
  1001.           Maximum of 20 menudef{} statements per file.
  1002.           Maximum of 20 options{} for each getkey{}.
  1003.           Maximum of 20 select{} statements for each menudef{}.
  1004.           Maximum of 3 major menu title lines.
  1005.           Maximum of 2 menu title lines.
  1006.           Maximum of 10 (%0-%9) user variables.  Each 80 characters.
  1007.           Available stack space dictates the maximum nesting
  1008.           level for menu files.
  1009.  
  1010.